home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / dviware / beebe / updates / 00mail.16 < prev    next >
Text File  |  1990-10-01  |  26KB  |  655 lines

  1. 26-May-88 18:15:50-MDT,26245;000000000001
  2. Date: Thu 26 May 88 18:15:48-MDT
  3. From: "Nelson H.F. Beebe" <Beebe@SCIENCE.UTAH.EDU>
  4. Subject: DVI driver family update #16
  5. To: "DVI mailing list part 2": ;
  6. cc: BEEBE@SCIENCE.UTAH.EDU
  7. X-US-Mail: "Center for Scientific Computing, South Physics, University of Utah, Salt Lake City, UT 84112"
  8. X-Telephone: (801) 581-5254
  9. Message-ID: <12401511229.12.BEEBE@SCIENCE.UTAH.EDU>
  10.  
  11.                   DVI Driver Family Update #16
  12.                            [26-May-88]
  13.  
  14.  
  15. ============
  16. INTRODUCTION
  17. ============
  18.  
  19. This newsletter should have gone out a couple of months ago,
  20. but I have just been too busy.  Utah is in the process of
  21. planning for the purchase of a supercomputer, and I've been
  22. serving on the technical committee for it since Oct-87.
  23. Bids have now come in, and evaluations are underway.
  24.  
  25. I will be away from Salt Lake from 9-June to 5-August, and
  26. unfortunately, will not be able to get Version 2.11 released
  27. before I leave.  I therefore felt that this issue had better
  28. get out now, or you won't hear from me until September.
  29. With my current mail volume, I expect that it will take 3 to
  30. 4 weeks after my return just to open and answer mail,
  31. sigh...
  32.  
  33.  
  34. ============
  35. MAKE PROGRAM
  36. ============
  37.  One of the notes below comments on a bug in the
  38. public-domain version of Make.  Ignore the comment about
  39. volunteer efforts for preparing a fix.  Since Easter, I've
  40. developed a brand new ground-up reimplementation of Make
  41. which on completion of testing will be available on the same
  42. terms as the DVI family.  This new implementation is
  43. designed from the start to eliminate all the misfeatures of
  44. other Makes, add features of newer Unix Makes, plus
  45. directives similar to those of the C preprocessor (but with
  46. ! instead of # prefixes), conform completely to January 1988
  47. draft ANSI C, run on multiple operating systems, and conform
  48. (mostly) to the syntax of Unix Make.  It is being tested
  49. locally on a dozen different machines representing 5
  50. hardware architectures and 4 operating systems.  I'd hoped
  51. to have it ready for beta testing before my June departure,
  52. but alas, that will not be possible either.  The current
  53. version is working locally, has about 8800 lines of code in
  54. itself and support software, plus about 100 pages of
  55. documentation in two manuals.  If any of you are interested
  56. in getting your name in for a beta test release, send me
  57. mail to that effect; it will, however, require that you have
  58. Internet access for FTP, because I will not send tapes or
  59. floppies, and it is too big for easy electronic mail
  60. distribution.
  61.  
  62.  
  63. =======
  64. TURBO C
  65. =======
  66.  
  67. Several people tried (unsuccessfully) to implement the
  68. driver family on the IBM PC with Turbo C 1.0.  The large
  69. number of bugs that were being reported on the net
  70. discouraged me from even buying it (one of the bugs resulted
  71. in the reciprocal of division results being returned).  I
  72. bought version 1.5, and made some extensive tests with it on
  73. the DVI family, the ELEFUNT elementary function test
  74. package, and on my new Make implementation.
  75.  
  76. The good news is that Turbo C 1.5 is fast; compilation of
  77. one DVI driver on the PC XT drops from 35 minutes with
  78. Microsoft C 5.0 to 7 minutes with Turbo C 1.5.
  79.  
  80. The bad news is that the compiler is fatally flawed for C
  81. programs containing floating-point, to the extent that even
  82. random numeric constants are compiled into incorrect values!
  83. I won't go into further details about this.  A 10-page
  84. letter to Borland International resulted in a positive
  85. response from the software development director, and my
  86. appointment as a beta test site for 2.0, which in-house at
  87. least, fixes all the bugs I reported.
  88.  
  89. Given that the discounted price of Microsoft C is about
  90. $350, and that of Turbo C about $45, it would be nice to
  91. switch to Turbo C.  For the new Make, which has no
  92. floating-point usage, Turbo C performs admirably, and I've
  93. not detected any bugs that affect Make.
  94.  
  95. The Turbo C library is not as complete as the Microsoft C
  96. library; it lacks the <sys/xxx.h> files, <signal.h> and
  97. signal(), utime(), and probably some others.  The output
  98. .EXE files seem to be somewhat smaller than those from
  99. Microsoft C 5.0, and TLINK is much faster than LINK.  LINK
  100. can also be used with Turbo C output.  Although Turbo C does
  101. support most draft ANSI C syntax, it does not issue as many
  102. helpful diagnostics as Microsoft C does, nor does it have an
  103. option to produce ANSI style declarations from existing
  104. code.  Also, Turbo C's command line options are not
  105. standard; instead of "cc -o foo foo.c", you have to write
  106. "tcc -efoo foo.c" (no space after -e), which requires
  107. additional nuisance changes in Makefiles.
  108.  
  109. Wildcard command-line expansion for compiled programs is
  110. automatic; with Microsoft C, a special library routine has
  111. to be loaded.
  112.  
  113.  
  114. =====================
  115. LATEX EDITING SUPPORT
  116. =====================
  117.  
  118. I have developed some extensive support for editing LaTeX
  119. files in GNU Emacs, which is widely available and runs on
  120. most Unix and VMS systems.  We are shipping Emacs copies on
  121. VMS BACKUP tapes with the DVI drivers.  The latex.el library
  122. is now at beta test release 0.07, with 34 sites
  123. participating.
  124.  
  125. latex.el grew out of a translation from TECO to Lisp of the
  126. editing support I developed for TOPS-20 Emacs, which is
  127. described in our Local LaTeX Guide; many of you have seen it
  128. (it is accessible for ANONYMOUS FTP from SCIENCE.UTAH.EDU in
  129. APS:<TEX.PUB.LOCAL-GUIDE>.  Thanks to the ease of
  130. programming in Lisp, I have added many new features,
  131. including the availability on a key of every macro in the
  132. LaTeX book, together with helpful information about macro
  133. arguments.  There is also support for SliTeX.  The current
  134. development version (pre-0.08) of latex.el is 2513 lines
  135. long.
  136.  
  137. The library has a LaTeX-gripe function that makes it easy
  138. for users to mail comments to me while they are still in the
  139. editor , and I have several submissions that contain good
  140. ideas that I'd like to implement before the final release.
  141.  
  142. I'd hoped to finish up the test before my departure, and
  143. make an official release of latex.el to the Free Software
  144. Foundation, but again, this will not be possible until at
  145. least August.
  146.  
  147.  
  148. ===========
  149. MAKEINDEX
  150. ===========
  151.  
  152. One of the changes recorded below is a correction to
  153. TeXindex.  After uncovering some further misfeatures of
  154. TeXindex that make it unable on the IBM PC to handle index
  155. files larger than 32767 bytes long (that in itself is a long
  156. story), I turned my efforts to seeing if MakeIndex could be
  157. gotten to work on non-Unix environments.  That indeed was
  158. the case, after a fair amount of work, and a couple of
  159. months ago, an announcement of it was made on TeXhax.
  160. MakeIndex now runs on all the systems that the DVI driver
  161. family runs under (except IBM VM/CMS), and is a much
  162. superior system.  There was initial confusion about its
  163. release status, because it was developed at the Berkeley
  164. VORTeX project, which licenses its software for a fee.  That
  165. has been worked out, and MakeIndex may be freely
  166. distributed; if that had not happened, I would have turned
  167. elsewhere in search of a public indexing system.  Pehong
  168. Chen and Leslie Lamport have done an excellent job of
  169. MakeIndex, and I urge you to get it and adopt it.  Copies
  170. are available for ANONYMOUS FTP from UCBVAX.BERKELEY.EDU,
  171. SCIENCE.UTAH.EDU, CTRSCI.UTAH.EDU, and
  172. JUNE.CS.WASHINGTON.EDU.  It will become part of the
  173. Washington Unix TeX distribution, and is also included on
  174. DVI tapes that we ship from Utah.
  175.  
  176.  
  177. =======================
  178. DVI DRIVER DEVELOPMENTS
  179. =======================
  180.  
  181. Since the 2.10 release in November, 1987, the DVI family has
  182. seen the addition of two new drivers, DVIADX, for the Anadex
  183. Silent Scribe 72dpi and 144 dpi dot matrix printers and
  184. DVIGP, for the Phillips GP 72dpi and 144dpi dot matrix
  185. printers.  With these two, I am discontinuing the practice
  186. of maintaining separate programs for different resolutions
  187. of the same device (as was done for the Apple Imagewriter,
  188. Okidata, and Epson printers); local recompilation with
  189. different compile-time switch values can produce programs to
  190. support the two resolutions.
  191.  
  192. A significant new development during the past month has been
  193. the first successful port of the family to IBM VM/CMS using
  194. the Waterloo C compiler; the changes have been merged into
  195. my development sources, and will be available when 2.11
  196. comes out.  Shashi Sathaye at the University of Kentucky
  197. gets credit for this; I've sent her a copy of the current
  198. sources for verification of the merged changes.  A couple of
  199. weeks after I received her changes, I got notification from
  200. Russell Fulton at the University of Auckland in New Zealand
  201. that the start of a port to VM/CMS had also been made there.
  202. Previous attempts elsewhere with the SAS and IBM C compilers
  203. have been stymied by compiler bugs.
  204.  
  205. I've also received from Julian Perry an update for 2.10 of
  206. the changes to dvijep.c to support portrait and landscape
  207. printing, and Steven H. Gutfreund has supplied modifications
  208. to support \special{}.  Neither of these are currently
  209. merged into the master sources, because I'm awaiting the
  210. completion of the TeX Users Group committee report on
  211. standardization of \special{}s and other DVI driver
  212. features.  On request, I have mailed the changes to
  213. individuals who wanted to merge them into their own private
  214. versions of dvijep.
  215.  
  216. Thanks to the good efforts of the following people:
  217.  
  218. "DVICAN@science.utah.edu":
  219. ! The DVICAN mailing list [25-May-88] !
  220. beebe@science.utah.edu,                !Nelson H.F. Beebe!
  221. bertheau%FRINRA72.BITNET@cunyvm.cuny.edu,    !Yves Bertheau!
  222. DLT%STAR.RL.AC.UK@cunyvm.cuny.edu,        !David Terrett!
  223. friesland%rz.informatik.uni-hamburg.dbp.de@RELAY.CS.NET, !Gerd Friesland!
  224. rjjt%oberon.sv.dg.com@cs.utah.edu,        !Richard J.J. Tobias!
  225. TFYS-PP%FINOU.BITNET@cunyvm.cuny.edu,        !Pekka Pietilainen!
  226. dvican@science.utah.edu                ! !
  227. !**** Last Line ****
  228.  
  229. dvican, the driver for the Canon LBP 8 A2, has been
  230. substantially improved.  I've formed a small mailing list
  231. (the above people) to exchange correspondence about it; if
  232. any of you on this larger DVI list (currently 224 sites)
  233. have a Canon A2, let me know (soon), so I can get you on the
  234. small list too.
  235.  
  236.  
  237. ==============
  238. CHANGE HISTORY
  239. ==============
  240.  
  241. Because of the work noted in the preceding section, the
  242. development directories have many more changes than are
  243. recorded here.  These here are ones that you might want to
  244. patch into your local sources if they appear to impact you;
  245. if not, just sit tight and wait for 2.11.
  246.  
  247. [18-May-88]
  248.                 In dvijep.c about line 180, change
  249.         {PUTESC; sprintf(plotfs,"*c%dE",MAP_CHAR(ch)); OUTST(plotfs); }\
  250.                 to
  251.         {PUTESC; sprintf(plotfs,"*cd%dE",MAP_CHAR(ch)); OUTST(plotfs); }\
  252.                 This correction sets  the font number  to 0;  the
  253.                 old one works on the HP LaserJet, but might break
  254.                 on clones.
  255.  
  256. [14-Apr-88]
  257.                 Changed system() in vaxvms.c to allow warning and
  258.                 information  status  returns  to  be  treated  as
  259.                 success.  The body of system() now reads:
  260.  
  261.         t.dsc$w_length = strlen(s);
  262.         t.dsc$a_pointer = s;
  263.         t.dsc$b_class = DSC$K_CLASS_S;
  264.         t.dsc$b_dtype = DSC$K_DTYPE_T;
  265.  
  266.         /* The 3 low-order bits of stat are
  267.                 0 (warning),
  268.                 1 (success),
  269.                 2 (error),
  270.                 3 (information), or
  271.                 4 (severe or fatal error)
  272.            Consider values of 0, 1, or 3 to be success.  LIB$SPAWN
  273.            will usually return SS$_NORMAL, independent of the value
  274.            of stat.
  275.         */
  276.  
  277.         if (LIB$SPAWN(&t,0,0,0,0,0,&stat) != SS$_NORMAL)
  278.             return (127);
  279.         switch (stat & 7)
  280.         {
  281.         case 0:
  282.         case 1:
  283.         case 3:
  284.             return (0);
  285.         default:
  286.             return (127);
  287.         }
  288.  
  289.  
  290. [07-Mar-88]
  291.                 Changed type of main()  in keytst.c and  lptops.c
  292.                 from void to int,  and inserted return(0) at  end
  293.                 to keep lint and VAX VMS C compiler happy.  Draft
  294.                 ANSI C (Oct-86 and Jan-88) does not specify  what
  295.                 the type of main() should be, and most  compilers
  296.                 don't  care.   VMS  C  2.3  however  produces  an
  297.                 annoying warning message if main() is not of type
  298.                 int; I view this  behavior as erroneous,  because
  299.                 main() is  only  a convention  in  C, and  it  is
  300.                 possible   to   write   C   programs   in    many
  301.                 implementations that do not have a main().
  302.  
  303. [02-Mar-88]
  304.                 Added code to findpost.h to ignore trailing  NULs
  305.                 in a .DVI file, borrowing code from readpxl.h and
  306.                 readgf.h that do the  same thing for font  files.
  307.                 Users (including  me) have  been annoyed  by  the
  308.                 inability of the  drivers to handle  a .DVI  file
  309.                 which has passed through  a VAX VMS system  where
  310.                 gratuitous NULs  are  appended to  pad  the  file
  311.                 length to a multiple of 512 bytes.
  312.  
  313.                 This effort  revealed another  problem under  VAX
  314.                 VMS, and  that is  that the  code in  FSEEK()  in
  315.                 vaxvms.c on a request to position at  end-of-file
  316.                 actually positions  before  the  last  character,
  317.                 instead of after  it.  An  attempt at  correcting
  318.                 this was foiled by the VMS library ftell()  which
  319.                 returns 0  when the  position set  by FSEEK()  is
  320.                 outside the actual file limits, and while FTELL()
  321.                 can correct the  brain-damaged value returned  by
  322.                 ftell(), it  cannot distinguish  a nonsensical  0
  323.                 result from ftell()  at end-of-file  from one  at
  324.                 the beginning of the file.  Consequently, it  has
  325.                 been  necessary   in  findpost.h   to  bump   the
  326.                 postambleptr value by one.
  327.  
  328.                 Since  this   modification   can   be   installed
  329.                 independently in  even old  versions of  the  DVI
  330.                 driver family, and  a context difference  listing
  331.                 is larger than findpost.h,  here is the  complete
  332.                 new version:
  333.  
  334. /* -*-C-*- findpost.h */
  335. /*-->findpost*/
  336. /**********************************************************************/
  337. /****************************** findpost ******************************/
  338. /**********************************************************************/
  339.  
  340. void
  341. findpost()
  342.  
  343. {
  344.     register long       postambleptr;
  345.     register BYTE       i;
  346.     register UNSIGN16 the_char;         /* loop index */
  347.  
  348.     (void) FSEEK (dvifp, 0L, 2);        /* goto end of file */
  349.  
  350.     /* VAX VMS binary files are stored with NUL padding to the next
  351.     512 byte multiple.  We therefore search backwards to the last
  352.     non-NULL byte to find the real end-of-file, then move back from
  353.     that.  Even if we are not on a VAX VMS system, the DVI file might
  354.     have passed through one on its way to the current host, so we
  355.     ignore trailing NULs on all machines. */
  356.  
  357.     while (FSEEK(dvifp,-1L,1) == 0)
  358.     {
  359.         the_char = (UNSIGN16)fgetc(dvifp);
  360.         if (the_char)
  361.           break;                /* exit leaving pointer PAST last non-NUL */
  362.         UNGETC((char)the_char,dvifp);
  363.     }
  364.  
  365.     postambleptr = FTELL(dvifp) - 4;
  366.  
  367. #if    OS_VAXVMS
  368.     /* There is a problem with FSEEK() that I cannot fix just now.  A
  369.     request to position to end-of-file cannot be made to work correctly,
  370.     so FSEEK() positions in front of the last byte, instead of past it.
  371.     We therefore modify postambleptr accordingly to account for this. */
  372.  
  373.     postambleptr++;
  374. #endif
  375.  
  376.     (void) FSEEK (dvifp, postambleptr, 0);
  377.     while (TRUE)
  378.     {
  379.         (void) FSEEK (dvifp, --(postambleptr), 0);
  380.         if (((i = (BYTE)nosignex(dvifp,(BYTE)1)) != 223) &&
  381.             (i != DVIFORMAT))
  382.             (void)fatal("findpost():  Bad end of DVI file");
  383.         if (i == DVIFORMAT)
  384.             break;
  385.     }
  386.     (void) FSEEK (dvifp, postambleptr - 4, 0);
  387.     (void) FSEEK (dvifp, (long)nosignex(dvifp,(BYTE)4), 0);
  388. }
  389.  
  390. [20-Feb-88]
  391.                 We have  uncovered  a bug  in  the  public-domain
  392.                 multi-operating-system  make   utility,   pdmake.
  393.                 When a file  in a dependent  list must itself  be
  394.                 built by  application of a rule, the  value of $<
  395.                 gets changed  to reflect  that new  file, but  is
  396.                 subsequently not restored  to its  value for  the
  397.                 original target file.  Make  will then apply  the
  398.                 rule for the target file, but use the wrong  file
  399.                 name.   This  situation  never  occurred  before,
  400.                 because dependent files are usually just  include
  401.                 files,  which   never  have   to  be   built   by
  402.                 application of a rule.  The workaround in such  a
  403.                 case is  to  replace  use  of $<  in  a  rule  by
  404.                 $*.suffix.
  405.  
  406.                 Here is a  simple makefile  that illustrates  the
  407.                 bug:
  408.  
  409. DEBUG  = /NOTRACE /NODEBUG
  410. BFLAGS = /NOLIST $(DEBUG)
  411.  
  412. .SUFFIXES: .obj .l32 .b32 .r32
  413.  
  414. .b32.obj:
  415.         echo
  416.         echo '.B32.OBJ:'
  417.         echo '$$@' = [$@]
  418.         echo '$$*' = [$*]
  419.         echo '$$<' = [$<]
  420.         echo '$$?' = [$?]
  421.         bliss $(BFLAGS) /OBJECT=$*.obj $<
  422.  
  423. .r32.l32:
  424.         echo
  425.         echo '.R32.L32:'
  426.         echo '$$@' = [$@]
  427.         echo '$$*' = [$*]
  428.         echo '$$<' = [$<]
  429.         echo '$$?' = [$?]
  430.         bliss /library=$*.l32 $<
  431.  
  432. ftp_user.obj: ftp.l32 cli.l32
  433.  
  434.                 To  try  it,  create  3  empty  files:   cli.r32,
  435.                 ftp.r32, and  ftp_user.b32, and  then type  "make
  436.                 -n".  Unix make will correctly say
  437.  
  438.                 echo '$<' = [ftp_user.b32]
  439.  
  440.                 while pdmake will incorrectly say
  441.  
  442.                 echo '$<' = [cli.r32]
  443.  
  444.                 If the .b32.obj rule is changed to replace $<  by
  445.                 $*.b32, pdmake will work correctly.
  446.  
  447.                 Unfortunately, after spending a day and a half on
  448.                 this bug, I cannot offer a program correction  to
  449.                 fix it,  and  I cannot  spend  more time  on  it.
  450.                 Volunteer efforts are welcome.
  451.  
  452.                 The call  sequence  is  such  that  make()  calls
  453.                 dyndep() which sets $<  in a call to  setmacro(),
  454.                 then make()  calls make1()  which calls  docmd2()
  455.                 which calls expand()  which then substitutes  for
  456.                 $<.  If a  file in  the dependency  list must  be
  457.                 made, make() will call itself recursively  before
  458.                 calling make1(), and that call substitutes a  new
  459.                 value of $<.   The problem  is that  the code  in
  460.                 dyndep() to  set $<  cannot be  used directly  in
  461.                 make1() before the docmd2() call, because at that
  462.                 point, a rule is not being expanded, and a change
  463.                 to $<  would require  knowledge about  the  files
  464.                 which does not seem to be available there.
  465.  
  466. [06-Feb-88]
  467.                 Revised lpt.ps to handle formfeed and tabs.
  468.  
  469. [03-Feb-88]
  470.                 Alfred  Ganz  (ganz-alfred@yale.arpa)  has   been
  471.                 updating the catdvi  program which converts  Unix
  472.                 troff  C/A/T  output  to  a  TeX  DVI  file;  the
  473.                 existing version only  knows about  the very  old
  474.                 DVI format version  1.  In doing  so, he found  a
  475.                 bug in setchar() in  dvialw.c.  DVI files  output
  476.                 by TeX normally  will not cause  setchar() to  be
  477.                 entered.  There  is a  missing close  parenthesis
  478.                 that should have  been output about  line 106  in
  479.                 setchar().  Here  is  a Unix  context  difference
  480.                 (diff -c) listing; '+' marks the inserted line.
  481.  
  482. *** dvialw.c,78 Sun Nov  1 11:21:38 1987
  483. --- dvialw.c    Wed Feb  3 16:38:28 1988
  484. ***************
  485. *** 1080,1085 ****
  486. --- 1080,1086 ----
  487.                 }
  488.                 OUT_CHR('(');
  489.                 OUT_XCHR(c);
  490. +               OUT_CHR(')');
  491.                 if (ycp != str_ycp)
  492.                 {
  493.                     OUT_NUM(xcp);
  494.  
  495.  
  496. [03-Feb-88]     {Adobe Transcript warning}
  497.                 Alfred Ganz (ganz-alfred@yale.arpa) reports  that
  498.                 the Adobe Transcript spooler on his machine  does
  499.                 not do page accounting  correctly when the  input
  500.                 file  contains  a   Ctl-D  (the  last   character
  501.                 produced by dvialw).  That character is there  to
  502.                 signal end-of-job  to  the printer;  although  it
  503.                 would normally be supplied by a spooler  program,
  504.                 dvialw is  used on  many machines  (e.g. IBM  PC)
  505.                 with  less  sophisticated   connections  to   the
  506.                 printer, and  it  therefore  supplies  the  Ctl-D
  507.                 itself.  If you are  using Transcript, check  the
  508.                 accounting records it creates, and if  necessary,
  509.                 comment out the final line
  510.  
  511.                     OUT_CHR('\004');    /* PostScript end-of-job signal */
  512.  
  513.                 in devterm() in dvialw.c.  A similar patch should
  514.                 be applied to lptops.c; look for the line
  515.  
  516.                 if (putchar('\004') == EOF) /* CTL-D for EOF signal */
  517.  
  518.                 and change it to output a newline ('\n') instead.
  519.  
  520. [25-Jan-88]
  521.                 A couple  of users  have  commented on  the  slow
  522.                 speed and large output  file sizes of dvil3p  for
  523.                 the DEC  LN03+.   The  contributor,  John  Sauter
  524.                 (sauter%dssdev.DEC@decwrl.dec.com), clarifies:
  525.  
  526.                 ``Yes, it does  create bitmaps.  If  you have  an
  527.                 LN03-PLUS but  no  font  cartridges  DVIL3P  will
  528.                 work, whereas  DVI2LN3  (Flavio  Rose's  program)
  529.                 requires at least one font RAM cartridge but does
  530.                 not require the upgrade to full graphics (LN03 to
  531.                 LN03-PLUS).''
  532.  
  533.                 It would  clearly be  desirable to  have  another
  534.                 version  that   supported   a   downloaded   font
  535.                 mechanism   like   the   Flavio   Rose    driver.
  536.                 Volunteers,  anyone?   I  have  no  LN03   access
  537.                 locally to do it myself.
  538.  
  539. [20-Jan-88]     {VAX VMS Warning}
  540.                 I have observed that under  VAX VMS, when a  font
  541.                 substitution file is used, the drivers may  issue
  542.                 the following (spurious) message:
  543.  
  544. %fontsub():  Bad font substitution at line 3 in file [TEX_INPUTS:texfonts.sub]:
  545. [SYS$INPUT]
  546. Current TeX page counters: [0]
  547.  
  548.                 They then continue  correctly with the  requested
  549.                 substitution:
  550.  
  551. %Substituting font file [amcsc10 [mag 1369]] by [SYS$TEX:[TEX.CM.274]cmcsc10.pk
  552. [mag 1369]]
  553. Current TeX page counters: [0]
  554.  
  555.                 Simply    relinking    the    program    (WITHOUT
  556.                 recompilation) with the  debugger and running  it
  557.                 again causes  the  message to  disappear.   I  am
  558.                 therefore  inclined   to  suspect   a  VMS   code
  559.                 generation error; since the message is  harmless,
  560.                 I do  not  propose  to  investigate  it  further.
  561.                 Since VMS lacks the ability to insert a  debugger
  562.                 into the address space at run-time, like  TOPS-20
  563.                 can, it  would be  very difficult  to track  down
  564.                 this error; the above  output indicates that  the
  565.                 current input line read "SYS$INPUT", when in fact
  566.                 no such string is found in texfonts.sub.
  567.  
  568. [13-Jan-88]
  569.                 TEXIDX.C needs  some  changes to  work  correctly
  570.                 under  VAX  VMS  because  of  flaws  in  the  VMS
  571.                 library.  Somehow it got overlooked for  testing.
  572.                 Here is a Unix context difference listing of  the
  573.                 changes (diff -c old new):
  574.  
  575. *** texidx.c,13 Sat Nov 14 23:21:38 1987
  576. --- texidx.c    Wed Jan 13 11:51:49 1988
  577. ***************
  578. *** 51,56 ****
  579. --- 51,59 ----
  580.   #include <stdio.h>
  581.   #include <ctype.h>
  582.  
  583. + #define READ read
  584. + #define EXIT exit
  585. +
  586.   #ifdef KCC_20
  587.   #include <file.h>
  588.   #define tops20
  589. ***************
  590. *** 57,62 ****
  591. --- 60,69 ----
  592.   #else
  593.   #ifdef OS_VAXVMS
  594.   #include <file.h>
  595. + #undef READ
  596. + #define READ vms_read
  597. + #undef EXIT
  598. + #define EXIT vms_exit
  599.   #else
  600.   #ifdef OS_ATARI
  601.   #else
  602. ***************
  603. *** 413,419 ****
  604.       }
  605.  
  606.     flush_tempfiles (tempcount);
  607. !   exit (0);
  608.   }
  609.   
  610.   /* This page decodes the command line arguments to set the parameter variables
  611. --- 420,426 ----
  612.       }
  613.  
  614.     flush_tempfiles (tempcount);
  615. !   EXIT (0);
  616.   }
  617.   
  618.   /* This page decodes the command line arguments to set the parameter variables
  619. ***************
  620. *** 1027,1033 ****
  621.  
  622.     if (desc < 0)
  623.       fatal ("failure reopening %s", infile);
  624. !   file_size = read (desc, data, total);
  625.     file_data = data;
  626.     data[file_size] = 0;
  627.  
  628. --- 1034,1040 ----
  629.  
  630.     if (desc < 0)
  631.       fatal ("failure reopening %s", infile);
  632. !   file_size = READ (desc, data, total);
  633.     file_data = data;
  634.     data[file_size] = 0;
  635.  
  636. ***************
  637. *** 1676,1682 ****
  638.        char *s1, *s2;
  639.   {
  640.     error (s1, s2);
  641. !   exit (1);
  642.   }
  643.  
  644.   /* Print error message.  `s1' is printf control string, `s2' is arg for it. */
  645. --- 1683,1690 ----
  646.        char *s1, *s2;
  647.   {
  648.     error (s1, s2);
  649. !
  650. !   EXIT (1);
  651.   }
  652.  
  653.   /* Print error message.  `s1' is printf control string, `s2' is arg for it. */
  654. -------
  655.